Php 如何在浏览器中保持干净的url而不是脏的重定向url?

Php 如何在浏览器中保持干净的url而不是脏的重定向url?,php,.htaccess,mod-rewrite,http-headers,Php,.htaccess,Mod Rewrite,Http Headers,我已经决定为我的产品创建干净的url链接,以用于SEO目的,这样客户可以更好地记住链接。我已经研究了几个小时,但还没有完全理解干净和肮脏的url重定向概念。您可能会认为在这个主题上会有更简单的文档 我的.htaccess文件配置如下,可以完美地获取用户键入的干净url或干净链接,如www.example.com\Category\Subcategory\并将其重定向到.php文件,以访问MySQL表并显示产品信息 我搞不懂的是,如何在浏览器中向用户显示干净的url,而不显示脏的或重定向的url?

我已经决定为我的产品创建干净的url链接,以用于SEO目的,这样客户可以更好地记住链接。我已经研究了几个小时,但还没有完全理解干净和肮脏的url重定向概念。您可能会认为在这个主题上会有更简单的文档

我的.htaccess文件配置如下,可以完美地获取用户键入的干净url或干净链接,如www.example.com\Category\Subcategory\并将其重定向到.php文件,以访问MySQL表并显示产品信息

我搞不懂的是,如何在浏览器中向用户显示干净的url,而不显示脏的或重定向的url?这是在.htaccess文件中完成的吗

更清楚地说:

如果客户键入:www.example.com\shoes\running,.htaccess将clean url重定向到subcat_lookup_clean.php?c=$1&s=$2,它基本上处理clean url并查找适当的信息并动态显示

但是现在客户在浏览器中看到了www.example.com\subcat\u lookup\u clean.php?c=$1&s=$2

相反,我希望他们看到干净的url www.example.com\shoes\running

.htaccess文件包含:

Options +FollowSymLinks
RewriteEngine On

# do not do anything for already existing file, symbolic link or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

# redirect category/subcategory to lookup page
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ ./subcat_lookup_clean.php?c=$1&s=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ ./subcat_lookup_clean.php?c=$1&s=$2 [L]

已更正。htaccess下面的解决方案非常有效。

您可以在此处演示:


已更正。htaccess下面的解决方案非常有效。

您可以在此处演示:


您正在
mod_rewrite
重定向到一个php文件,该文件根据您传递的参数动态生成输出。URL在什么时候变得“脏”了?因此您也希望以另一种方式重新定向,以便如果有人访问
/subcat\u lookup\u clean.php?c=$1&s=$2
,他们会看到干净的URL吗?@BenM这是正确的。为什么有人会并且可以输入例如:
http://example.com/subcat_lookup_clean.php?c=5&s=9
首先在浏览器的地址栏中?毫无疑问,你有非常特殊的访问者,他们喜欢以非常困难的方式访问网站页面。我的观点是当
http://example.com/subcat_lookup_clean.php?c=5&s=9
被重定向只是为了将其替换为
http://example.com/5/9/
在浏览器的地址栏中,它以静默方式映射回自身:
http://example.com/subcat_lookup_clean.php?c=5&s=9
,根据您的规则。因此,在我的拙见中,这个操作除了浪费资源和降低性能之外没有任何目的。谷歌也会在最初的URL中结束,但在被重定向两次之后,这对搜索引擎优化毫无好处。你正在
mod_rewrite
重定向到一个php文件,该文件根据你传递的参数动态生成输出。URL在什么时候变得“脏”了?因此您也希望以另一种方式重新定向,以便如果有人访问
/subcat\u lookup\u clean.php?c=$1&s=$2
,他们会看到干净的URL吗?@BenM这是正确的。为什么有人会并且可以输入例如:
http://example.com/subcat_lookup_clean.php?c=5&s=9
首先在浏览器的地址栏中?毫无疑问,你有非常特殊的访问者,他们喜欢以非常困难的方式访问网站页面。我的观点是当
http://example.com/subcat_lookup_clean.php?c=5&s=9
被重定向只是为了将其替换为
http://example.com/5/9/
在浏览器的地址栏中,它以静默方式映射回自身:
http://example.com/subcat_lookup_clean.php?c=5&s=9
,根据您的规则。因此,在我的拙见中,这个操作除了浪费资源和降低性能之外没有任何目的。谷歌也将在最初的URL中结束,但在被重定向两次之后,这对搜索引擎优化毫无好处。
Options +FollowSymLinks
RewriteEngine On

# if redirected to url cleaner, redirect to actual lookup file and
# these lines will keep the clean url visible in the browser
RewriteRule ^cat_url_cleaner.php ./cat_lookup.php [L]
RewriteRule ^subcat_url_cleaner.php ./subcat_lookup.php [L]
RewriteRule ^subsubcat_url_cleaner.php ./subsubcat_lookup.php [L]

# do not do anything if already existing file, symbolic link or directory
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]

# redirect clean url (/category) for processing
RewriteRule ^([a-zA-Z0-9_-]+)$ ./cat_url_cleaner.php?c=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ ./cat_url_cleaner.php?c=$1 [L]

# redirect clean url (/category/subcategory) for processing
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ ./subcat_url_cleaner.php?c=$1&s=$2
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ ./subcat_url_cleaner.php?c=$1&s=$2 [L]

# redirect clean url (/category/subcategory/subsubcategory) for processing
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ ./subsubcat_url_cleaner.php?c=$1&s=$2&ss=$3
RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/$ ./subsubcat_url_cleaner.php?c=$1&s=$2&ss=$3 [L]