wordpress:mod_rewrite第一个“文件夹”名称作为get参数

时间:2012-01-18 09:18:03

标签: apache wordpress mod-rewrite url-rewriting

我将wordpress永久链接结构设置为仅使用articlename并获得了一个看起来像这样的.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

工作正常。

但我想在各种模板文件中区分不同的位置(即柏林,汉堡或慕尼黑)。所以我想我会把这个位置添加到这个URL:

http://myurl.com/berlin/articlename

现在我需要将其重写为

http://myurl.com/articlename?location=berlin

但是

http://myurl.com/articlename

http://myurl.com/category/articlename

应该仍然有效。只需寻找预定义的位置(柏林|汉堡|慕尼黑)。

我如何调整上面的RewriteRule来实现这个目标?

2 个答案:

答案 0 :(得分:0)

所以基本上,如果您要求的是http://myurl.com/(word1)/(word2)/(即只匹配 完全 两个单词,不能再多于单词)在内部被重写服务器端为http://myurl.com/(word2)?location=(word1),然后是:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule /([^/]+)/([^/]+)/$ /$2?location=$1 [QSA,L]

    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

答案 1 :(得分:0)

我通过对.htaccess文件添加以下内容来修复此问题:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} !location
RewriteRule ^(muenchen|berlin)/$ /index.php?location=$1 [NC,QSA,P]

RewriteCond %{QUERY_STRING} !location
RewriteRule ^(muenchen|berlin)/(.*)$ /$2?location=$1 [NC,QSA,P]

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>