我需要帮助重写我的url。我想通过考虑我当前树的当前组织来精确地组织我的url:
-! /www
.htaccess,
index.php, ...
--! **/views**, /assets
pageA.php, pageB.php, pageC.php
---! **/pageA**, /pageB, /pageC, /errors (404.php, 500.php...)
pageA1.php, **pageA2.php**, pageA3.php
/!\我为每一页使用特定的名称,前缀和数字只是为了举例,以便更好地理解文件和文件夹之间的连接。事实上,我使用的页面名称类似于:"contact us.php"、"our product.php"…
(1) 当我转到pageA.php时,我想要这个url路径:www.mywebsite.fr/pageA
(2) 当我转到pageA2.php时,我想:www.mywebsite.fr/pageA/pageA2
(3) 我不想要扩展文件(.php,.html)
事实上,我无法进入路径(2),因为我有一个404页面。
我创建了与特定php页面同名的文件夹,这只是为了我自己的组织,但这可能是一种糟糕的方式(对于SEO或其他任何事情…)事实上,我不知道。。。
我的重写模块(在www的.htaccess中)是:
<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
# Retirer les extensions des pages et les rendres accessibles en lecture
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /([^ ]+).php
RewriteRule ^/?(.*).php$ /$1 [L,R=301]
# check to see if the request is for a PHP file:
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
# Suppression d'un sous répertoire
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/views/$1.php -f
RewriteRule (.*) /views/$1.php [QSA,L]
</IfModule>
这只是我的想法,但它应该可以工作:
RewriteRule ^page([A-Z]{1})([1-9]?).php$ http://www.mywebsite.fr/page$1$2
RewriteRule ^page([A-Z]{1})([1-9]{1})$ http://www.mywebsite.fr/page$1/page$1$2 [L,R=301]
第一个"重写"指令检查以开头的文件名是否匹配
页面
以结尾(在文件扩展名.php之前)
- 单个字母(从a到Z);以及
- (可选)单个数字(从1到9)
如果它这样做了,它会捕获字母(和可选数字),并重写URI,最后不使用.php文件扩展名。
对于那些包含可选数字的URI,第二个"重写"指令分别捕获字母和数字。
然后,它根据正确的文件夹结构构建重定向,同时部署捕获的字母和捕获的数字。