【问题标题】:Apache: .htaccess: SEO: how to eliminate query string syntax (PHP)Apache:.htaccess:SEO:如何消除查询字符串语法(PHP)
【发布时间】:2015-09-06 16:51:59
【问题描述】:

this post 为我的问题提供了极好的帮助。然而,尽管尝试了其中描述的事情,但我仍然遇到问题,因为它看起来好像是我的 .htaccess file is not being parsed

我有一个包含以下页面的网站:

http://mywebsite.com/?menu1=home
http://mywebsite.com/?menu1=posts&menu2=johndoe
http://mywebsite.com/?menu1=posts&menu2=janedoe
http://mywebsite.com/?menu1=posts&menu2=nickdoe
http://mywebsite.com/?menu1=fashion&menu2=armani
http://mywebsite.com/?menu1=fashion&menu2=gucci
http://mywebsite.com/?menu1=about

这些页面通过 Windows 上我的 xampp 目录中的默认 index.php 文件显示。

如何让浏览器响应以下 SEO 友好链接?我希望我的 PHP 代码至少可以进行修改。

http://mywebsite.com/home
http://mywebsite.com/posts/johndoe
http://mywebsite.com/posts/janedoe
http://mywebsite.com/posts/nickdoe
http://mywebsite.com/fashion/armani
http://mywebsite.com/fashion/gucci
http://mywebsite.com/about

谢谢。

【问题讨论】:

    标签: php apache .htaccess xampp


    【解决方案1】:

    您可以在 Root/.htaccess 中使用这些规则

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/([^/]+)/?$ /?menu1=$1&menu2=$2 [QSA,NC,L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]+)/?$ /?menu1=$1 [QSA,NC,L]
    

    第一条规则将“/posts/jondoe/”重写为“/?menu=posts&menu=jonde”,第二条规则将“/about”重写为“/?home=about”..

    【讨论】:

    • RewriteCond %{REQUEST_FILENAME} !-d 告诉 apache 停止重写,如果请求已经针对现有目录(如果您请求目录 example.com/dir ,那么 apache 将不要重写您的请求,但它会为您提供您请求的目录)
    • RewriteCond %{REQUEST_FILENAME} !-f 告诉 apache 如果请求已经是针对现有文件的,则停止重写(如果您请求现有的 example.com/foo.php ,那么 apache 将不要重写您的请求,但它会为您提供您请求的文件)
    • 更多关于Url重写、flags的信息可以参考Apache官方文档httpd.apache.org/docs/current/mod/mod_rewrite.html
    • 好的,现在我明白了,重写规则右侧指定的路径是绝对路径,所以一切都将相对于http://mywebsite.com/。如果这些路径需要相对于 .htaccess 所在的目录,则将路径设为相对路径。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2014-07-27
    • 2016-12-08
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多