1

这是我的测试 .htaccess

    RewriteEngine On
    Options +FollowSymLinks    

    #WWW redirect WORKS
    RewriteCond %{HTTP_HOST} !^$
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    RewriteRule ^home/$ index.php [L] #THIS RULE  WORKS
    RewriteRule ^news/(.+)/$ /news.php?page=$1 [L] #not works
    RewriteRule ^news/(.+)/$ /news.php?article=$1 [L] #not works
    RewriteRule ^news/$ news.php [L] #WORKS

我想做这个:

"news.php" => "news/"    
"news.php?page=3" => "news/3/"
"news.php?article=lorem-ipsum-3" => "news/lorem-ipsum-3/"

使用此 url 规则,这样的 url 效果很好,但不是我想要的:

http://www.xxxxxx.com/news/?page=3  #works
http://www.xxxxxx.com/news/?article=lorem-ipsum-2 #works

如何修复.htaccess?

谢谢

4

1 回答 1

1

我看到的唯一问题是您有两个匹配相同条件的规则(L标志阻止它检查更多规则)并且您/在重写路径前面有一个额外的。

RewriteRule ^news/(.+)/$ news.php?page=$1 [L]
RewriteRule ^news/(.+)/$ news.php?article=$1 [L] # Will never execute

除此之外,它们看起来还不错。(我通过htaccess 测试器运行它们,它们以正确的规则终止。

如果您没有提供明确的规范链接,并且您没有使用 .htaccess/在末尾手动添加 a (如果缺少),您可能需要考虑/使用 a?

RewriteRule ^news/(.+)/?$ news.php?page=$1 [L]

更新 假设如果它只是一个数字,它是一个页面,如果它是其他任何东西,那么它是一篇文章:

RewriteRule ^news/([0-9]+)/?$ news.php?page=$1 [L]
RewriteRule ^news/(.+)/?$ news.php?article=$1 [L]
于 2013-08-02T14:44:25.490 回答