与Stack Exchange上的mod_rewrite和mod_alias有关的Apache配置有很多问题,但我找不到问题的答案,所以这是另一个问题! ;)
我将旧网站迁移到新位置。
以前可以访问http://xxx/blog/index.php?post/YYYY/MM/DD/title
等网址的文章,因此该表单中有许多链接通过现有网页。
现在,网址应为http://xxx/post/YYYY/MM/DD/title
,因此请从最终网址中删除blog/index.php?
。
我想使用mod_alias和Redirect
子句,但我读here Redirect
子句是在RewriteRule
子句之后解释的,这是我的问题因为我已经使用了RewriteRule
条件。
这是我当前的.htaccess文件:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1
我试着用这种方式修改它:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^blog/index.php? / [R=301,L]
RewriteRule ^(.*)$ index.php?$1
它几乎可以工作,除了:
http://xxx/blog/index.php?post/YYYY/MM/DD/title
被重定向/重写为http://xxx/blog/?post/YYYY/MM/DD/title
(请注意?
),因此它无法正常工作欢迎任何帮助!
如果我使用以下规则:
RewriteRule ^/?blog/index\.php(.*)$ /$1 [R=301,L]
然后去
http://xxx/blog/index.php?test
带我去
http://xxx/?test
这几乎是正确的(询问标记仍然是一个问题)!
但是当我尝试通过添加\?
:
RewriteRule ^/?blog/index\.php\?(.*)$ /$1 [R=301,L]
然后它就会停止工作......去那里:
http://xxx/blog/index.php?test
把我留在那儿!
为什么?
答案 0 :(得分:0)
尝试将此规则添加到您的规则集的开头:
RewriteCond %{THE_REQUEST} \?post/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^&\ ]*)
RewriteRule ^index\.php$ /post/%1/%2/%3/%4? [L,R=301]
所以它看起来像:
RewriteEngine on
RewriteBase /
RewriteCond %{THE_REQUEST} \?post/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^&\ ]*)
RewriteRule ^index\.php$ /post/%1/%2/%3/%4? [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1